package com.zy.yun.utils;

import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

/**
 * @Author: 王彦委
 * @Description: redis工具类 todo 未做异常处理
 * @Date: 21:40 2019/11/7
 */
@Component
public class RedisUtil<T,V> {

    @Autowired
    private StringRedisTemplate redisTemplate;

    /**
     * @Author: 王彦委
     * @Description: 设置 key==>value 字符串
     * @Date: 21:41 2019/11/7
     */
    public void setString(String key, String value) {
        redisTemplate.opsForValue().set(key, value);
    }

    /**
     * @Author: 王彦委
     * @Description: 根据 key 获取 value 字符串
     * @Date: 21:43 2019/11/7
     */
    public String getString(String key) {
        return redisTemplate.opsForValue().get(key);
    }

    /**
     * @Author: 王彦委
     * @Description: 设置 对象
     * @Date: 21:44 2019/11/7
     */
    public void setObject(String key, Object object) {
        redisTemplate.opsForValue().set(key, JSONObject.toJSONString(object));
    }

    /**
     * @Author: 王彦委
     * @Description: 根据key, 查询并指定返回 指定类型
     * @Date: 21:46 2019/11/7
     */

    public T getObject(String key, Class<T> clazz) {
        String str = redisTemplate.opsForValue().get(key);
        if (StringUtils.isBlank(str)) {
            return null;
        }
        return JSONObject.parseObject(str, clazz);
    }

    /**
     * @Author: 王彦委
     * @Description: 存放map, map中存在字符串
     * @Date: 21:58 2019/11/7
     */
    public void setMapString(String name, String key, String value) {
        redisTemplate.opsForHash().put(name, key, value);
    }

    /**
     * @Author: 王彦委
     * @Description: 获取map中的字符串
     * @Date: 22:03 2019/11/7
     */

    public String getMapString(String name, String key) {
        Object o = redisTemplate.opsForHash().get(name, key);

        return null == o ? null : o.toString();
    }

    /**
     * @Author: 王彦委
     * @Description: 存放map, map中存在json串
     * @Date: 22:01 2019/11/7
     */

    public void setMapObject(String name, String key, Object object) {
        redisTemplate.opsForHash().put(name, key, JSONObject.toJSONString(object));
    }

    /**
     * @Author: 王彦委
     * @Description: 获取map中存在json串，并返回指定类型
     * @Date: 22:03 2019/11/7
     */

    public T getMapObject(String name, String key, Class<T> clazz) {
        Object o = redisTemplate.opsForHash().get(name, key);
        return null == o ? null : JSONObject.parseObject(o.toString(), clazz);

    }

    /**
     * @Author: 王彦委
     * @Description: 获取map中存在json串，并返回指定类型
     * @Date: 22:03 2019/11/7
     */

    public V getMapObject2(String name, String key, Class<V> clazz) {
        Object o = redisTemplate.opsForHash().get(name, key);
        return null == o ? null : JSONObject.parseObject(o.toString(), clazz);

    }
}
